package com.mycode.interpreter16;

import com.mycode.interpreter16.resolve.InstructionHandler;
import com.mycode.interpreter16.resolve2.Context;
import com.mycode.interpreter16.resolve2.ExpressionNode;
import com.mycode.interpreter16.resolve2.Node;

/**
 * 解释器模式：定义一个语言的文化，并建立一个解释器来解释该语言中的句子
 * 主要优点：
 *     1、易于改变和扩展文法，由于在解释器模式中适用类来表示语言的文法规则，因此可以通过继承等机制来改变或扩展文法
 *     2、每一条文法规则都可以表示为一个类
 *     3、实现文法比较荣荣
 *     4、增加新的解释表达式较为方便
 *
 * 主要缺点：
 *     1、对于复杂文法难以维护，如果一个语言包含太多文法规则，文化解释类的个数将会急剧增加，导致系统难以管理和维护，此时可以考虑适用语法分析程序等方式来取代解释器模式
 *     2、执行效率较低，解释器模式中可能会存在大量的循环和递归调用，在解释较为复杂的句子时速度很慢
 *
 * 适用场景：
 *     1、可以将一个需要解释执行的语言中的句子表示为一个抽象语法树
 *     2、一些重复出现的问题可以用一种简单的语言来进行表达
 *     3、一个语言的文法较为简单
 *     4、执行效率不是关键问题
 *
 */
public class Bootstrap {

    public static void main(String[] args) {
        // String instruction = "up move 5 and down run 10 and left move 5";
        // InstructionHandler handler = new InstructionHandler();
        // handler.handle(instruction);
        // String outString = handler.output();
        // System.out.println(outString);

        String text = "LOOP2 LOOP 2 PRINT zhangsan SPACE SPACE PRINT lisi BREAK END PRINT guojing SPACE SPACE PRINT huangrong";
        Context context = new Context(text);

        Node node = new ExpressionNode();
        node.interpret(context);
        node.execute();
    }
}
